import axios from "axios"

// 创建axios实例
const service = axios.create({
	baseURL: import.meta.env.VITE_API_BASE_URL || "", // api基础URL，可从环境变量配置
	timeout: 10000, // 请求超时时间
	headers: {
		"Content-Type": "application/json;charset=utf-8",
	},
})

// 请求拦截器
service.interceptors.request.use(
	(config) => {
		// 添加token等认证信息
		const token = localStorage.getItem('token')
		if (token) {
			config.headers['Authorization'] = `Bearer ${token}`
		}
		return config
	},
	(error) => {
		console.error("请求错误:", error)
		return Promise.reject(error)
	},
)

// 响应拦截器
service.interceptors.response.use(
	(response) => {
		const res = response.data
		// 根据后端约定的数据格式进行处理
		return res
	},
	(error) => {
		console.error("响应错误:", error)
		
		// 统一处理错误
		if (error.response) {
			const { status } = error.response
			
			// token过期或无效
			if (status === 401) {
				localStorage.removeItem('token')
				window.location.href = '/login'
				console.error('登录已过期，请重新登录')
			} else if (status === 403) {
				console.error('没有权限访问此资源')
			} else if (status >= 500) {
				console.error('服务器错误')
			}
		} else if (error.request) {
			console.error('网络错误，请检查网络连接')
		} else {
			console.error('请求配置错误:', error.message)
		}
		
		return Promise.reject(error)
	},
)

// 创建request对象，提供get、post等方法
const request = {
	// GET请求方法
	get(options) {
		return service({
			url: options.url,
			method: "GET",
			params: options.params || {},
		})
	},

	// POST请求方法
	post(options) {
		return service({
			url: options.url,
			method: "POST",
			data: options.params || {},
		})
	},

	// PUT请求方法
	put(options) {
		return service({
			url: options.url,
			method: "PUT",
			data: options.params || {},
		})
	},

	// DELETE请求方法
	delete(options) {
		return service({
			url: options.url,
			method: "DELETE",
			params: options.params || {},
		})
	},

	// PATCH请求方法
	patch(options) {
		return service({
			url: options.url,
			method: "PATCH",
			data: options.params || {},
		})
	},
}

export default request